/*
 * @lc app=leetcode.cn id=54 lang=java
 *
 * [54] 螺旋矩阵
 */

// @lc code=start
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();

        if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return res;

        int row = matrix.length - 1;
        int col = matrix[0].length - 1;

        int r = 0, c = 0;       // 当前位置

        while(r <= row && c <= col) {
            // 从左到右
            for(int i=c; i<=col; i++) {
                res.add(matrix[r][i]);
            }
            // 从上到下
            for(int j=r+1;j<=row;j++) {
                res.add(matrix[j][col]);
            }
            // 从右到左
            if(r < row && c < col) {
                for(int k = col-1;k>=c;k--) {
                    res.add(matrix[row][k]);
                }
                // 从下到上
                for(int m=row-1;m>r;m--) {
                    res.add(matrix[m][c]);
                }
            }

            r++;
            row--;
            c++;
            col--;
        }
        return res;
    }
}
// @lc code=end

